<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="WSwqS" id="WSwqS"><span data-lake-id="ufb1a2289" id="ufb1a2289">典型回答</span></h1>
  <p data-lake-id="u4b66fd0c" id="u4b66fd0c"><br></p>
  <p data-lake-id="u8b9a1164" id="u8b9a1164"><span data-lake-id="ub603f792" id="ub603f792">蓝绿部署、金丝雀发布（灰度发布）这些都是软件部署和发布中常用的一些策略和技术，用于实现在生产环境中逐步更新和验证新版本的方式。它们的主要目标是降低部署风险、确保服务稳定性，并实现快速、高效的软件发布。</span></p>
  <p data-lake-id="ufa612f0e" id="ufa612f0e"><span data-lake-id="u3f9d048c" id="u3f9d048c">​</span><br></p>
  <p data-lake-id="u7707afa9" id="u7707afa9"><strong><span data-lake-id="u2266a540" id="u2266a540">蓝绿部署</span></strong><span data-lake-id="u10ce6397" id="u10ce6397">是一种在部署新版本时，准备两套完全相同的生产环境，称为蓝环境（Blue Environment）和绿环境（Green Environment）。初始状态下，用户的请求都会被路由到蓝环境，而绿环境处于闲置状态。</span></p>
  <p data-lake-id="u7a743309" id="u7a743309"><span data-lake-id="u8169d591" id="u8169d591">​</span><br></p>
  <p data-lake-id="ub93475ca" id="ub93475ca"><img src="https://cdn.nlark.com/yuque/0/2023/png/5378072/1691059418506-d26fb340-1489-4de2-b0ff-596dc40f94bf.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_57%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="ueb39264b" id="ueb39264b"><span data-lake-id="u39c0284d" id="u39c0284d">​</span><br></p>
  <p data-lake-id="u98653684" id="u98653684"><span data-lake-id="u24c44320" id="u24c44320">​</span><br></p>
  <p data-lake-id="u9ed0b6a6" id="u9ed0b6a6"><span data-lake-id="ucddce769" id="ucddce769">当新版本部署完成并测试通过后，将流量切换到绿环境，此时绿环境变为主要的生产环境，而蓝环境则成为备份环境。</span></p>
  <p data-lake-id="ubda60843" id="ubda60843"><span data-lake-id="u4c682a42" id="u4c682a42">​</span><br></p>
  <p data-lake-id="u4f67a704" id="u4f67a704"><span data-lake-id="uc1ab5b59" id="uc1ab5b59">当然，在这个切流过程也不是一下100%都要切过来的，也可以先切流一部分，观察一段时间，然后再逐步扩大切流比例，最终完成整体切流。</span></p>
  <p data-lake-id="u34397d73" id="u34397d73"><span data-lake-id="u94cdc2a0" id="u94cdc2a0">​</span><br></p>
  <p data-lake-id="ub3b7ddb1" id="ub3b7ddb1"><img src="https://cdn.nlark.com/yuque/0/2023/png/5378072/1691059450334-b0b83460-84c1-4330-a126-b7cc59b7f92d.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_59%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="ub04c8e5e" id="ub04c8e5e"><br></p>
  <p data-lake-id="u78146a5c" id="u78146a5c"><span data-lake-id="u046f4613" id="u046f4613">蓝绿部署的优点是可以实现快速回滚，只需要将流量切回到蓝环境即可。但是他的缺点也比较明显，蓝绿部署有一套闲置环境，这就意味着有一半的机器是不会对外提供服务的，那么就会导致很大的资源浪费。</span></p>
  <p data-lake-id="ua8a3c7c9" id="ua8a3c7c9"><br></p>
  <p data-lake-id="u52002b91" id="u52002b91"><strong><span data-lake-id="u2dd8fa0b" id="u2dd8fa0b">金丝雀发布</span></strong><span data-lake-id="u580ce51a" id="u580ce51a">，其实就是灰度发布，之所以叫金丝雀发布，是因为金丝雀对矿场中的毒气比较敏感，所以在矿场开工前工人们会放一只金丝雀进去，以验证矿场是否存在毒气。</span></p>
  <p data-lake-id="u75338558" id="u75338558"><span data-lake-id="u0b812eb1" id="u0b812eb1">​</span><br></p>
  <p data-lake-id="udb4de443" id="udb4de443"><span data-lake-id="u17197532" id="u17197532">与蓝绿部署不同的是，它不需要有一组闲置的服务器，他又叫灰度发布。</span></p>
  <p data-lake-id="uf7525812" id="uf7525812"><span data-lake-id="u4d2de842" id="u4d2de842">​</span><br></p>
  <p data-lake-id="uabca39c7" id="uabca39c7"><span data-lake-id="u5cad1fd7" id="u5cad1fd7">在这种方式中，会在整个服务器集群中，挑选一部分机器进行灰度发布，发布会直接对外提供服务，通过给这些已发布的机器引流，来验证服务是否正常。</span></p>
  <p data-lake-id="ud270eb4a" id="ud270eb4a"><span data-lake-id="uded833f5" id="uded833f5">​</span><br></p>
  <p data-lake-id="u28022465" id="u28022465"><img src="https://cdn.nlark.com/yuque/0/2023/png/5378072/1691060148788-6293cffb-1af9-41b7-aa02-c48b2efbcece.png?x-oss-process=image%2Fwatermark%2Ctype_d3F5LW1pY3JvaGVp%2Csize_54%2Ctext_SmF2YSA4IEd1IFA%3D%2Ccolor_FFFFFF%2Cshadow_50%2Ct_80%2Cg_se%2Cx_10%2Cy_10"></p>
  <p data-lake-id="u5b6cda6b" id="u5b6cda6b"><br></p>
  <p data-lake-id="uf0838634" id="uf0838634"><span data-lake-id="u9612a416" id="u9612a416">通过灰度发布，可以在生产环境中测试新版本的稳定性和性能，如果发现问题，可以及时回滚或修复。逐渐增加新版本的流量也可以降低风险，确保系统的稳定性。</span></p>
  <p data-lake-id="u4da2ad24" id="u4da2ad24"><span data-lake-id="u3860e2ab" id="u3860e2ab">​</span><br></p>
  <p data-lake-id="uba237126" id="uba237126"><span data-lake-id="u6b5da857" id="u6b5da857">一般来说，灰度发布要比蓝绿发布好一些，毕竟他没那么浪费资源，唯一的问题就是回滚不太容易做，需要把已发布应用退回到上一个版本中。</span></p>
  <p data-lake-id="u41e8d38d" id="u41e8d38d"><span data-lake-id="ude05f12b" id="ude05f12b">​</span><br></p>
  <h1 data-lake-id="bIWIn" id="bIWIn"><span data-lake-id="ued187cc8" id="ued187cc8">扩展知识</span></h1>
  <p data-lake-id="u488f6f9f" id="u488f6f9f"><br></p>
  <h2 data-lake-id="KGxer" id="KGxer"><span data-lake-id="ua8df63bf" id="ua8df63bf">如何快速回滚</span></h2>
  <p data-lake-id="u557332d4" id="u557332d4"><br></p>
  <p data-lake-id="ufa7b0a10" id="ufa7b0a10"><span data-lake-id="u10883fa0" id="u10883fa0">有个好的办法，那就是记录基线。应用在发布前，把应用相关的内容，如环境、容器、war包等全部都记录下来，在需要回滚时，直接基于这个基线进行快速部署即可。</span></p>
 </body>
</html>